package viewPackage;

import java.util.ArrayList;
import java.util.Random;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;

@SuppressWarnings("serial")
public class KaPow extends JPanel {
	
	private ArrayList<String> first;
	private ArrayList<String> middle;
	private ArrayList<String> end;
	
	static private String location = "images/Alphabet";
	static private String extension = ".png";	
	
	private String phrase;
	private Color bg;
	private int exc;
	private ArrayList<Integer> set;
	
	public KaPow() {
		super();
		
		first = new ArrayList<String>();
		middle = new ArrayList<String>();
		end = new ArrayList<String>();
		
		set = new ArrayList<Integer>();
		
		this.initializeFirst();
		this.initializeMiddle();
		this.initializeEnd();
		
	}
	
	@Override
	public void repaint() {
		super.repaint();
	}
	
	@Override
	public void paintComponent(Graphics g) {
		
		//System.out.println("PAINTING KAPOW");
		//System.out.println("background is: " + bg);
		
		this.setBackground(bg);
		this.setForeground(bg);
		
		g.setColor(bg);
		g.fillRect(0, 0, this.getWidth(), this.getHeight());
		
		//int startX = (this.getWidth() / 2) - (phrase.length() / 2);
		int startX = 200;
		
		String file = null; 
				
		for (int i = 0; i < phrase.length() + exc; i++) {
		
			if (i < phrase.length()) {
				file = location + Integer.toString(set.get(i)) + "/" + Character.toString(phrase.charAt(i)) + extension;
			}
			else {
				file = location + Integer.toString(set.get(i)) + "/exc" + extension;
			}
		
			g.drawImage(Toolkit.getDefaultToolkit().getImage(file), startX + i*50, this.getHeight()/2 - 25, 50, 50, null);
		
		}
		
		
	}
	
	public void update() {
		
		
		
		this.phrase = this.getNextString();
		
		Random r = new Random();
		
		int c = r.nextInt(10);
		
		if (c == 0) {
			this.bg = Color.BLUE;
		}
		else if (c == 1) {
			this.bg = Color.CYAN;
		}
		else if (c == 2) {
			this.bg = Color.GREEN;
		}
		else if (c == 3) {
			this.bg = Color.LIGHT_GRAY;
		}
		else if (c == 4) {
			this.bg = Color.MAGENTA;
		}
		else if (c == 5) {
			this.bg = Color.ORANGE;
		}
		else if (c == 6) {
			this.bg = Color.PINK;
		}
		else if (c == 7) {
			this.bg = Color.RED;
		}
		else if (c == 8) {
			this.bg = Color.WHITE;
		}
		else if (c == 9) {
			this.bg = Color.YELLOW;
		}
		
		exc = 1 + r.nextInt(3);
		
		for (int i = 0; i < set.size(); i++) {
			set.remove(0);
		}
		
		for (int i = 0; i < phrase.length() + exc; i++) {
			set.add(1 + r.nextInt(2));
		}
		 
		this.setBackground(bg);
		this.setForeground(bg);
		
	}
	
	public void output() {
		Random r = new Random();
		String output = first.get(r.nextInt(first.size())) + middle.get(r.nextInt(middle.size())) + end.get(r.nextInt(end.size()));
		System.out.println(output);
	}
	
	public String getNextString() {
		Random r = new Random();
		return first.get(r.nextInt(first.size())) + middle.get(r.nextInt(middle.size())) + end.get(r.nextInt(end.size()));
	}
		
	private void initializeFirst() {
		first.add("b");
		first.add("baz");
		first.add("br");
		first.add("cl");
		first.add("cr");
		first.add("dr");
		first.add("dz");
		first.add("f");
		first.add("fap");
		first.add("fr");
		first.add("gl");
		first.add("gr");
		first.add("j");
		first.add("k");
		first.add("ker");
		first.add("kr");
		first.add("m");
		first.add("n");
		first.add("o");
		first.add("ouch");
		first.add("p");
		first.add("pl");
		first.add("qu");
		first.add("r");
		first.add("s");
		first.add("skl");
		first.add("sp");
		first.add("spl");
		first.add("squ");
		first.add("sw");
		first.add("t");
		first.add("thw");
		first.add("th");
		first.add("tr");
		first.add("v");
		first.add("vag");
		first.add("vl");
		first.add("vr");
		first.add("w");	
		first.add("wh");
		first.add("y");
		first.add("z");
		first.add("zap");
		first.add("zgr");
		first.add("zl");		
	}
	private void initializeMiddle() {
		middle.add("a");
		middle.add("ae");
		middle.add("ai");
		middle.add("aaa");
		middle.add("ee");
		middle.add("i");
		middle.add("o");
		middle.add("oi");
		middle.add("oo");
		middle.add("u");
	}
	private void initializeEnd() {
		end.add("bbb");
		end.add("ck");
		end.add("eth");
		end.add("f");
		end.add("fap");
		end.add("ff");
		end.add("ggh");
		end.add("gh");
		end.add("honk");
		end.add("honky");
		end.add("k");
		end.add("lk");
		end.add("lp");
		end.add("m");
		end.add("mm");
		end.add("mp");
		end.add("nch");
		end.add("nck");		
		end.add("ng");
		end.add("nk");
		end.add("nx");
		end.add("p");
		end.add("pe");
		end.add("ppe");
		end.add("ppp");
		end.add("pow");
		end.add("rbb");
		end.add("rk");
		end.add("roo");
		end.add("rp");
		end.add("rst");
		end.add("rth");
		end.add("sh");
		end.add("shy");
		end.add("sp");
		end.add("ss");
		end.add("t");
		end.add("throom");
		end.add("tt");
		end.add("wham");
		end.add("wie");		
		end.add("wk");
		end.add("yo");		
	}	
}
